package com.cskaoyan.market.typeHandler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @ClassName GenderTypeHandler
 * @Description:
 * java数据类型是字符类型         男性、女性
 * 数据库里面对应的字段类型是int类型 0、1
 * Class.forName(com.mysql.jdbc.Driver);
 * Connection connection = DriverManager.getConnection(url,user,password);
 * PreparedStatement ps = connection.prepareStatement(sql);
 * ps.setXXX(index, param);
 * ps.exectueUpdate()/executeQuery();
 * @Author 远志 zhangsong@cskaoyan.onaliyun.com
 * @Date 2023/3/18 9:40
 * @Version V1.0
 **/
public class GenderTypeHandler extends BaseTypeHandler<String> {

    /**
     * 往数据库里面操作修改数据时需要用的
     * 每当我们执行修改插入等操作时，那么便触发该方法
     * @param ps
     * @param i 参数的索引位置
     * @param parameter 传递过来的性别；也就是男性、女性
     * @param jdbcType
     * @throws SQLException
     */
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
        //赋值的时候，传递过来的java对象中数据类型是字符串，但是保存到数据库时，我们希望是数字int
        ps.setInt(i, Gender.getCodeByName(parameter));
    }

    /**
     * 下面的三个方法全部都是获取数据使用的方法
     * 当我们进行查询数据时，便会触发该方法
     * @param rs
     * @param columnName
     * @return
     * @throws SQLException
     */
    @Override
    public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return Gender.getNameByCode(rs.getInt(columnName));

    }

    @Override
    public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return Gender.getNameByCode(rs.getInt(columnIndex));
    }

    /**
     * 数据库里面的存储过程会使用该方法，我们忽略即可
     * @param cs
     * @param columnIndex
     * @return
     * @throws SQLException
     */
    @Override
    public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return Gender.getNameByCode(cs.getInt(columnIndex));
    }
}
